package org.nf.web.servlet;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * @author wangl
 * @date 2024/5/22
 */
public interface HandlerInterceptor {

    /**
     * 执行请求处理前执行的方法，如果返回false则不执行用请求处理
     * @param request 请求对象
     * @param response 相应对象
     * @param handler 请求处理对象
     * @return 是否放行
     * @throws Exception 可能出现的异常
     */
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        return true;
    }

    /**
     * 请求处理完后在渲染视图前执行此方法
     * @param request 请求对象
     * @param response 响应对象
     * @param handler 请求处理对象
     * @param view 视图
     * @throws Exception 可能出现的异常
     */
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                            BaseView view) throws Exception {
    }

    /**
     * 视图渲染完成后，不管有无异常产生都会执行此方法
     * @param request 请求对象
     * @param response 相应对象
     * @param handler 请求处理对象
     * @param ex 产生的异常对象
     * @throws Exception 可能产生的异常
     */
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                 Throwable ex) throws Exception {
    }
}